The invention relates generally to fault tolerant computer systems and, more particularly, to mechanisms for fault tolerant access to storage subsystems.
Storage devices, such as disk drives, typically attach to and communicate with a computer system over a SCSI bus. Other devices, such as the key board and system processor, communicate with the storage devices over a system I/O bus such as a PCI bus. To facilitate communication between the devices on the two busses, a SCSI adaptor plugs into both busses. The SCSI adaptor is essentially a translator, which receives generic commands generated by the system components, and translates the commands to specialized commands for the particular storage devices that are attached to the SCSI bus. The system components thus have to know only the types, or classes, of storage devices available, and not the specifics of the devices.
During system boot-up, a SCSI port driver, either alone or in conjunction with a plug and play manager, identifies the devices that are accessible through the SCSI adaptor by relative location and class, e.g., disk or tape drive. If the system is operating in, for example, a Windows NT environment, the operating system then creates for the identified devices a set of device objects that can be used by the system components, to direct the generic data transfer commands to the respective storage devices.
To add fault tolerance to such a system, it is desirable to include in the system one or more additional SCSI adaptors that provide redundant paths from the PCI bus to the SCSI bus, and thus, to the storage devices. Adding the redundant SCSI adaptors to a system that uses Windows NT, however, causes the system to create additional sets of device objects for the storage devices. Specifically, the system creates one set that corresponds to the storage devices that are accessible through the first SCSI adaptor, a second set for the storage devices that are accessible through the second SCSI adaptor and so forth. Accordingly, each storage device is identified by multiple device objects, which may confuse or cause other problems for data transfer operations.
The inventive system includes a port duplex driver (PDD) that creates a xe2x80x9cvirtual SCSI adaptor,xe2x80x9d to control the operations of one or more conventional SCSI adaptors.
During boot-up operations or when the status of a device on the SCSI bus changes, the PDD identifies the virtual SCSI adaptor as the only adaptor that provides access to the storage devices on the SCSI bus. The system then assigns a single set of device objects to the storage devices and data transfer commands are directed to the storage devices through the virtual adaptors using the device objects. The PDD thereafter intercepts the commands that are directed through the virtual SCSI adaptor, and redirects them to a selected one of the actual SCSI adaptors. The selected SCSI adaptor then operates in a conventional manner, to translate the generic commands to device-specific commands for the storage devices, and so forth.
If the selected SCSI adaptor fails, the PDD redirects the data transfer operations instead through one of the redundant SCSI adaptors. The failure does not affect the remainder of the system, which continues to conduct data transfer operations through the virtual SCSI adaptor.
The PDD may create the virtual SCSI adaptor even for configurations in which a single SCSI adaptor is connected to the SCSI bus. In this way, one or more redundant SCSI adaptors may be added at a later time and mapped by the PDD to the existing virtual SCSI adaptor, without affecting the way in which the remainder of the system conducts data transfer operations.